package 单调栈

// 单调栈保存单次遍历的结果，符合条件的先前进栈的元素可以被计算结果并出栈，当前元素都是要进栈的
func dailyTemperatures(temperatures []int) []int {
	res := make([]int, len(temperatures))

	st := []int{0}

	for i := 1; i < len(temperatures); i++ {
		top := st[len(st)-1]
		if temperatures[i] > temperatures[top] {
			for len(st) != 0 && temperatures[i] > temperatures[top] {
				res[top] = i - top
				st = st[:len(st)-1]
				if len(st) != 0 {
					top = st[len(st)-1]
				}
			}
		}
		st = append(st, i)
	}
	return res
}
